/*
 * SPDX-FileCopyrightText: 2022-2023 Andrew Gunnerson
 * SPDX-License-Identifier: GPL-3.0-only
 */

package com.sanji.audio_test.output

import android.content.ContentResolver
import android.content.Context
import android.net.Uri
import android.os.Parcelable
import androidx.core.net.toFile
import androidx.documentfile.provider.DocumentFile
import kotlinx.parcelize.Parcelize

/**
 * 输出文件数据类
 * 用于表示一个输出文件的URI、脱敏信息和MIME类型
 */
@Parcelize
data class OutputFile(
    /**
     * 指向单个文件的URI，可以是 [ContentResolver.SCHEME_FILE] 或
     * [ContentResolver.SCHEME_CONTENT] 方案
     */
    val uri: Uri,

    /** [uri] 的字符串表示形式，已对私人信息进行脱敏处理 */
    val redacted: String,

    /** [uri] 内容的MIME类型 */
    val mimeType: String,
) : Parcelable {
    /**
     * 将URI转换为DocumentFile对象
     *
     * @param context 应用上下文
     * @return 对应的DocumentFile对象
     * @throws IllegalArgumentException 如果URI方案无效
     */
    fun toDocumentFile(context: Context): DocumentFile =
        when (uri.scheme) {
            ContentResolver.SCHEME_FILE -> DocumentFile.fromFile(uri.toFile())
            // 仅在API <19时返回null
            ContentResolver.SCHEME_CONTENT -> DocumentFile.fromSingleUri(context, uri)!!
            else -> throw IllegalArgumentException("无效的URI方案: $redacted")
        }
}